#ifndef ML307_BOARD_H
#define ML307_BOARD_H

#include "board.h"
#include <ml307_at_modem.h>

/**
 * @brief ML307模组板卡驱动类
 * 
 * 提供ML307 4G模组的网络连接和通信功能
 */
class Ml307Board : public Board {
protected:
    /**
     * @brief ML307 AT指令模组对象
     */
    Ml307AtModem modem_;

    /**
     * @brief 获取板卡JSON配置信息
     * 
     * @return std::string 板卡配置的JSON字符串
     */
    virtual std::string GetBoardJson() override;
    
    /**
     * @brief 等待网络就绪
     * 
     * 等待模组注册到网络并获取IP地址
     */
    void WaitForNetworkReady();

public:
    /**
     * @brief 构造函数
     * 
     * @param tx_pin 发送引脚
     * @param rx_pin 接收引脚
     * @param rx_buffer_size 接收缓冲区大小，默认4096字节
     */
    Ml307Board(gpio_num_t tx_pin, gpio_num_t rx_pin, size_t rx_buffer_size = 4096);
    
    /**
     * @brief 获取板卡类型
     * 
     * @return std::string 板卡类型标识符
     */
    virtual std::string GetBoardType() override;
    
    /**
     * @brief 启动网络连接
     * 
     * 初始化模组并连接到网络
     */
    virtual void StartNetwork() override;
    
    /**
     * @brief 创建HTTP客户端
     * 
     * @return Http* HTTP客户端对象指针
     */
    virtual Http* CreateHttp() override;
    
    /**
     * @brief 创建WebSocket客户端
     * 
     * @return WebSocket* WebSocket客户端对象指针
     */
    virtual WebSocket* CreateWebSocket() override;
    
    /**
     * @brief 创建MQTT客户端
     * 
     * @return Mqtt* MQTT客户端对象指针
     */
    virtual Mqtt* CreateMqtt() override;
    
    /**
     * @brief 创建UDP客户端
     * 
     * @return Udp* UDP客户端对象指针
     */
    virtual Udp* CreateUdp() override;
    
    /**
     * @brief 获取网络状态图标
     * 
     * @return const char* 表示当前网络状态的图标字符
     */
    virtual const char* GetNetworkStateIcon() override;
    
    /**
     * @brief 设置电源节能模式
     * 
     * @param enabled 是否启用节能模式
     */
    virtual void SetPowerSaveMode(bool enabled) override;
};

#endif // ML307_BOARD_H
